// const express = require('express');
// const OSS = require('ali-oss');
// const path = require('path'); // 引入 path 模块，用于处理文件路径
// require('dotenv').config();

// const app = express();
// app.use(express.json());

// // OSS客户端配置
// const client = new OSS({
//   region: process.env.OSS_REGION,
//   accessKeyId: process.env.OSS_ACCESS_KEY_ID,
//   accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
//   bucket: process.env.OSS_BUCKET,
// });

// // 应该放在 API 路由定义之前。 通过静态资源的回复
// app.use(express.static(path.join(__dirname, 'public')));

// // 生成上传用的预签名URL
// app.get('/api/upload-url', async (req, res) => {
//   try {
//     const { filename, contentType } = req.query;
//     if (!filename || !contentType) {
//       return res.status(400).json({ error: '文件名和内容类型是必需的' });
//     }

//     // 生成唯一文件名
//     const key = `uploads/${Date.now()}-${filename}`;
    
//     // 生成预签名URL，有效期1小时
//     const url = client.signatureUrl(key, {
//       method: 'PUT',
//       expires: 3600,
//       'Content-Type': contentType
//     });

//     res.json({ 
//       uploadUrl: url,
//       fileKey: key,
//       expiresIn: 3600
//     });
//   } catch (error) {
//     console.error('生成预签名URL失败:', error);
//     res.status(500).json({ error: '生成预签名URL失败' });
//   }
// });


// const PORT = process.env.PORT || 3000;
// app.listen(PORT, () => {
//   console.log(`服务器运行在 http://localhost:${PORT}`);
// });

const express = require('express');
const mysql = require('mysql2/promise');
const OSS = require('ali-oss');
const bodyParser = require('body-parser');
const path = require('path');
require('dotenv').config(); // 加载环境变量

const app = express();
const port = process.env.PORT || 3000;
app.use(bodyParser.json());

const createPool = () => {
  return mysql.createPool({
    host: process.env.DB_HOST,
    port: parseInt(process.env.DB_PORT),
    user: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    waitForConnections: true,
    connectionLimit: 10,
    queueLimit: 0,
    ssl: { rejectUnauthorized: true } // 强制使用 SSL 连接
  });
};
const db = createPool();
// 创建 reviews 表 (如果不存在)
async function createReviewTableIfNotExists() {
  try {
    await db.query(`
      CREATE TABLE IF NOT EXISTS reviews (
        id INT AUTO_INCREMENT PRIMARY KEY,
        user_id VARCHAR(255) NOT NULL,
        user_name VARCHAR(255),
        restaurant_name VARCHAR(255) NOT NULL,
        restaurant_location VARCHAR(255) NOT NULL,
        dish_name VARCHAR(255),
        rating INT NOT NULL,
        review_text TEXT NOT NULL,
        image_keys TEXT
      )`);
  } catch (error) {
    console.error('Error creating table:', error);
  }
}
createReviewTableIfNotExists();
// 使用 body-parser 解析 application/json 类型的数据
app.use(bodyParser.json());
// 创建一个新的评价
app.post('/api/reviews', async (req, res) => {
  const { userId, userName, restaurantName, restaurantLocation, dishName, rating, reviewText, imageKeys } = req.body;
  try {
    await db.query(
      `INSERT INTO reviews (user_id, user_name, restaurant_name, restaurant_location, dish_name, rating, review_text, image_keys) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
      [userId, userName, restaurantName, restaurantLocation, dishName, rating, reviewText, JSON.stringify(imageKeys)]
    );
    res.status(201).json({ message: 'Review created successfully' });  // 返回 JSON 格式的响应
  } catch (err) {
    console.error(err);
    res.status(500).json({ message: 'Error inserting review' });  // 返回 JSON 格式的响应
  }
});

// 查询所有评价
app.get('/api/reviews', async (req, res) => {
  try {
    const [rows] = await db.query('SELECT * FROM reviews');
    res.status(200).json(rows);
  } catch (err) {
    console.error(err);
    res.status(500).send('Error fetching reviews');
  }
});

// OSS客户端配置
const client = new OSS({
  region: process.env.OSS_REGION,
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  bucket: process.env.OSS_BUCKET,
});

// 生成上传用的预签名URL
app.get('/api/upload-url', async (req, res) => {
  try {
    const { filename, contentType } = req.query;
    if (!filename || !contentType) {
      return res.status(400).json({ error: '文件名和内容类型是必需的' });
    }

    // 生成唯一文件名
    const key = `uploads/${Date.now()}-${filename}`;

    // 生成预签名URL，有效期1小时
    const url = await client.signatureUrl(key, {
      method: 'PUT',
      expires: 3600,
      'Content-Type': contentType,
    });

    res.json({
      uploadUrl: url,
      fileKey: key,
      expiresIn: 3600,
    });
  } catch (error) {
    console.error('生成预签名URL失败:', error);
    res.status(500).json({ error: '生成预签名URL失败' });
  }
});

// 公共静态文件目录
app.use(express.static(path.join(__dirname, 'public')));

// 启动服务器
app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});